<?php
require_once 'PHPUnit/Framework.php';
require_once "amicitia/conf/Conf.class.php";
require_once 'amicitia/arquitectura/Cargador.class.php';
def("amicitia/persistencia/daos/","ConexionBD");
def("amicitia/persistencia/daos/","FabricaDao");
def("amicitia/modelo/entidades/","Grupo");

/**
 * @author Willy A. Kuster
 */
class PruebaDaoJuego extends PHPUnit_Framework_TestCase {

	private $daoGrupo;

	/**
	 * Realiza la conexión a la base de datos y crea una instancia de
	 * DaoGrupo.
	 */
	protected function setUp() {
		ConexionBD::getConexionBD()->conectar();
		$fabricaDao = FabricaDao::obtenerFabrica();
		$this->daoGrupo = $fabricaDao->obtenerDaoGrupo();
	}
	
	/**
	 * Prueba la obtención de un objeto Grupo desde la base de datos.
	 */
	public function testObtenerGrupo(){
		$id = 1;
		
		$grupoEsperado = new Grupo();
		$grupoEsperado->setId($id);
		$grupoEsperado->setNombre("Cubix");
		$grupoEsperado->setPassword("9d658601daa1ec698009c58d765de05d353b41eb");
		$grupoEsperado->setEsVisible(true);
		
		$grupoObtenido = $this->daoGrupo->obtenerGrupo($id);
		
		$this->assertEquals($grupoEsperado, $grupoObtenido);
	}
	
	/**
	 * Prueba la persistencia de un objeto Grupo en la base de datos.
	 */
	public function testGuardarGrupo(){
		
		$grupo = new Grupo();
		$grupo->setNombre("Poko");
		$grupo->setPassword("poko");
		$grupo->setEsVisible(false);
		
		$id = $this->daoGrupo->guardarGrupo($grupo);
		
		$grupoEsperado = new Grupo();
		$grupoEsperado->setId($id);
		$grupoEsperado->setNombre("Poko");
		$grupoEsperado->setPassword("b0758387fdcb58fb0e92347cc80cc05bc27d67e7");
		$grupoEsperado->setEsVisible(false);
		
		$grupoObtenido = $this->daoGrupo->obtenerGrupo($id);
		
		$this->assertEquals($grupoEsperado, $grupoObtenido);
	}
	
	/**
	 * Prueba el borrado de un Grupo en la base de datos.
	 */
	public function testEliminarGrupo() {
		
		$grupo = new Grupo();
		$grupo->setNombre("Poko");
		$grupo->setPassword("poko");
		
		$id = $this->daoGrupo->guardarGrupo($grupo);
		
		$exito = $this->daoGrupo->eliminarGrupo($id);
		
		$GrupoObtenido = $this->daoGrupo->obtenerGrupo($id);
		
		$this->assertTrue($exito);
		$this->assertEquals(NULL, $GrupoObtenido);
	}
	
	/**
	 * Deshace todos los cambios y cierra la conexión a la base de datos.
	 */
	protected function tearDown() {
		ConexionBD::getConexionBD()->deshacer();
		ConexionBD::getConexionBD()->desconectar();
	}
	
}
?>